import { constantRoute } from '@/router/routes'
/*
 * @Author: liuxiao
 * @Date: 2023-09-04 01:26:14
 * @Last Modified by: liuxiao
 * @Last Modified time: 2023-11-12 00:51:33
 * ps:使用then实现
 */
//创建用户相关的小仓库
import { defineStore } from 'pinia'

import { loginFormData, loginResponseData } from '@/api/user/type'
import { reqLogin, reqUserInfo } from '@/api/user'
//引入操作本地存储的工具方法

import { getItem, removeAllItem, removeItem, setItem } from '@/utils/storage'
import { TOKEN } from '@/constant'
import { UserState } from './types/type'

//创建用户小仓库
let useUserStore = defineStore('User', {
  //小仓库存储数据的地方
  state: (): UserState => {
    return {
      token: getItem(TOKEN) || '', //用户唯一标识
      userInfo: {}, //用户信息
      menuRoutes: constantRoute //仓库存储生成菜单需要数组（路由）
    }
  },
  //异步|逻辑的地方
  actions: {
    // 用户登录的方法
    async login(data: loginFormData) {
      let res: loginResponseData = await reqLogin(data)
      if (res.code == 0) {
        console.log(res.data.token, 'res.data.token')
        //if (res.code === 0)
        //将token存储到仓库
        // state.token = res.data.token
        this.token = res.data.token
        //将token存储到本地

        setItem(TOKEN, res.data.token)

        //能保证async函数返回成功的promise
        return 'ok'
        //UserState.value.token = res.data.token
      }
    },

    //获取用户信息的方法
    async getUserInfo() {
      try {
        const res = await reqUserInfo()

        if (res.code === 0) {
          this.userInfo = res.data
          // console.log(this.userInfo, 'userInfo')
          //console.log(this.userInfo.username, 'username')
          return 'ok'
        } else {
          return Promise.reject('获取用户信息失败!')
        }
      } catch (err: any) {
        return Promise.reject('获取用户信息失败!')
      }
    },
    //退出登录
    async userlogout() {
      //1,清除用户信息
      this.userInfo = {}
      this.token = ''

      //2.清除缓存数据
      // removeItem(TOKEN)
      removeAllItem()

      //3.TODO:清理权限相关配置（后续更新）

      //   let result = await reqLogout()
      //   if (result.code == 200) {
      //     this.token = ''
      //     this.username = ''
      //     this.avatar = ''
      //     REMOVE_TOKEN()
      //     return 'ok'
      //   } else {
      //     return Promise.reject(new Error(result.message))
      //   }
    }
  },
  getters: {
    hasUserInfo: (state) => {
      return JSON.stringify(state.userInfo) !== '{}'
    }
  }
})

//对外暴露获取小仓库的方法

export default useUserStore
